package net.zjitc.dao.Impl;

import net.zjitc.dao.OrderDao;
import net.zjitc.pojo.Orderitem;
import net.zjitc.pojo.Orders;
import net.zjitc.utils.db.C3P0Utils;
import org.apache.commons.dbutils.QueryRunner;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

/**
 * Created by Administrator on 2017/12/14.
 */
public class OrderDaoImpl implements OrderDao {
    //不要自动获得数据源
    QueryRunner runner = new QueryRunner();

    public void add(Orders orders) {
        String sql = "insert into orders value(?,?,?,?,?,?,?,?)";//把多个参数封装成一个数组
        Connection connection = null;
        try {
            connection = C3P0Utils.getConnection();
            //1.插入订单
            Object obj[] = new Object[]{orders.getOid(),orders.getTotal(),orders.getOrdertime(),orders.getState(),orders.getName(),
                            orders.getPhone(),orders.getAddr(),orders.getUser().getUid()};
            int count = runner.update(connection,sql,obj);//数据库连接,一定是事务开启时创建的连接对象

            /**2.插入订单子项。因为订单子项是多条记录，所以可以使用循环语句，一条条插入
             系统一个方法：批量处理
             使用循环，从订单子项目中的集合中，取出每条记录，然后把相应的参数封装在对应的数组中，组成一个二维数组
             */
            sql = "insert into orderitem(count,subtotal,pid,oid,osatate) value(?,?,?,?,?)";
            List<Orderitem> list = orders.getOrderitemList();//订单子项的集合
            int len = list.size();
            Object[][] objs = new Object[len][];
            //使用循环，从订单子项目中的集合中，取出每条记录，然后把相应的参数封装在对应的数组中，组成一个二维数组
            for (int i = 0; i < len; i++){
                Orderitem item = list.get(i);//从集合中取出第i条记录
                objs[i] = new Object[]{item.getCount(),item.getSubtotal(),item.getProduct().getPid(),orders.getOid(),item.getOsatate()};
            }
            //批量处理
            runner.batch(connection,sql,objs);//使用这条语句批量执行
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
